#pragma once
#include "EngineHead.h"
#include "FoundationStruct.h"

namespace mini
{
	class CShader;
	class CActor;
	struct DrawCell
	{
		constexpr static int getType() { return 0; }
		virtual void apply();

		CShader* pShader = nullptr;
		CActor* pActor = nullptr;
	};

	struct WVPDrawCell : public DrawCell
	{
		constexpr static int getType() { return 1; }
		virtual void apply();

		CMatrix matrixArray[3];
	};

	struct LightDrawCell : public DrawCell
	{
		constexpr static int getType() { return 2; }
		virtual void apply();

		CPoint4F ambientColor;
		CPoint4F diffuseColor;
		CPoint4F specularColor;
		CPoint4F lightDirection;
	};

	struct RefractionDrawCell : public DrawCell
	{
		constexpr static int getType() { return 3; }
		virtual void apply();

		CPoint4F clipPlane;
	};

	struct ReflectionDrawCell : public DrawCell
	{
		constexpr static int getType() { return 4; }
		virtual void apply();
		
		CMatrix matrix;
	};
}
